<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <meta>
  <!-- Stylesheets -->
  <link href="../web.css" type="text/css" rel="stylesheet"></link>
  <link href="../pygmentize.css" type="text/css" rel="stylesheet"></link>
  <title>VLFeat - Documentation - C API</title>
  <link rel="stylesheet" type="text/css" href="../doxygen.css"></style>

  <!-- Scripts-->
  
 </meta>

 <!-- Body Start -->
 <body>
  <div id="header">
   <!-- Google CSE Search Box Begins -->
   <form action="http://www.vlfeat.org/search.html" method="get" id="cse-search-box" enctype="application/x-www-form-urlencoded">
    <div>
     <input type="hidden" name="cx" value="003215582122030917471:oq23albfeam"></input>
     <input type="hidden" name="cof" value="FORID:11"></input>
     <input type="hidden" name="ie" value="UTF-8"></input>
     <input type="text" name="q" size="31"></input>
     <input type="submit" name="sa" value="Search"></input>
    </div>
   </form>
   <script src="http://www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en" xml:space="preserve" type="text/javascript"></script>
   <!-- Google CSE Search Box Ends -->
   <h1><a shape="rect" href="../index.html" class="plain"><span id="vlfeat">VLFeat</span><span id="dotorg">.org</span></a></h1>
  </div>
  <div id="headbanner">
   Documentation - C API
  </div>
  <div id="pagebody">
   <div id="sidebar"> <!-- Navigation Start -->
    <ul>
<li><a href="../index.html">Home</a>
</li>
<li><a href="../download.html">Download</a>
</li>
<li><a href="../doc.html">Documentation</a>
<ul>
<li><a href="../mdoc/mdoc.html">Matlab API</a>
</li>
<li><a href="index.html" class='active' >C API</a>
</li>
<li><a href="../man/man.html">Man pages</a>
</li>
</ul></li>
<li><a href="../overview/tut.html">Tutorials</a>
</li>
<li><a href="../applications/apps.html">Applications</a>
</li>
</ul>

   </div> <!-- sidebar -->
   <div id="content">
    
    <link rel="stylesheet" type="text/css" href="../doxygen.css"></style>
    <div class="doxygen">
<div>
<!-- Generated by Doxygen 1.7.5.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">host.h File Reference</div>  </div>
</div>
<div class="contents">

<p>Host.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#addfdc610a7c5d53f5167f7a02b5baf4f">VL_YESNO</a>(x)&#160;&#160;&#160;((x)?&quot;yes&quot;:&quot;no&quot;)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert a boolean to "yes" or "no" strings.  <a href="#addfdc610a7c5d53f5167f7a02b5baf4f"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Configuration options</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a6aa5ee10e7a31696751b3e5f6d18c829">VL_DISABLE_THREADS</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if multi-threading support is disabled.  <a href="#a6aa5ee10e7a31696751b3e5f6d18c829"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a7395dc017ee0e86717a1b5f8c38fcb44">VL_DISABLE_SSE2</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if SSE2 support if disabled.  <a href="#a7395dc017ee0e86717a1b5f8c38fcb44"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Defining functions</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5">VL_EXPORT</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Declares a DLL exported symbol.  <a href="#a489d7622ef2e3937985fcb9f89a5cbe5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496">VL_INLINE</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds appropriate inline function qualifier.  <a href="#a41b94143626a52276b1a0ffd1e29e496"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">C preprocessor helper macros</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a61a48096b951544d0554b8a06aa59306">VL_STRINGIFY</a>(x)&#160;&#160;&#160;# x</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert the argument to a string.  <a href="#a61a48096b951544d0554b8a06aa59306"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a2a5d283f40e6bf0fc1ca74644084a423">VL_XSTRINGIFY</a>(x)&#160;&#160;&#160;VL_STRINGIFY(x)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Expand and then convert the argument to a string.  <a href="#a2a5d283f40e6bf0fc1ca74644084a423"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#aeba7ee97f4e6474a78c242ca9c49798c">VL_CAT</a>(x, y)&#160;&#160;&#160;x ## y</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatenate two arguments into a lexical unit.  <a href="#aeba7ee97f4e6474a78c242ca9c49798c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef">VL_XCAT</a>(x, y)&#160;&#160;&#160;VL_CAT(x,y)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Expand and then concatenate two arguments into a lexical unit.  <a href="#a755f8d9673970b82ad9375e32d2693ef"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ae5a425c5832ec8b91c3acd70cc30ad8d">VL_XCAT3</a>(x, y, z)&#160;&#160;&#160;VL_XCAT(VL_XCAT(x,y),z)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Expand and then concatenate three arguments into a lexical unit.  <a href="#ae5a425c5832ec8b91c3acd70cc30ad8d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a0b450714848c2941f3e00e7a9d2338f4">VL_XCAT4</a>(x, y, z, u)&#160;&#160;&#160;VL_XCAT(VL_XCAT3(x,y,z),u)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Expand and then concatenate four arguments into a lexical unit.  <a href="#a0b450714848c2941f3e00e7a9d2338f4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a551d8bfc670074c55bf8a0a7405f5e28">VL_XCAT5</a>(x, y, z, u, v)&#160;&#160;&#160;VL_XCAT(VL_XCAT4(x,y,z,u),v)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Expand and then concatenate five arguments into a lexical unit.  <a href="#a551d8bfc670074c55bf8a0a7405f5e28"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Identifying the host operating system</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace5a6e77fa663303cfd489f3eaaf1cd9"></a><!-- doxytag: member="host.h::VL_OS_LINUX" ref="ace5a6e77fa663303cfd489f3eaaf1cd9" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ace5a6e77fa663303cfd489f3eaaf1cd9">VL_OS_LINUX</a>&#160;&#160;&#160;1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host operating system is Linux. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa463843e959e6add43b050e78892e75a"></a><!-- doxytag: member="host.h::VL_THREADS_POSIX" ref="aa463843e959e6add43b050e78892e75a" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>VL_THREADS_POSIX</b>&#160;&#160;&#160;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6368203ab40afc45aa5d2faaf794038e"></a><!-- doxytag: member="host.h::VL_OS_MACOSX" ref="a6368203ab40afc45aa5d2faaf794038e" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a6368203ab40afc45aa5d2faaf794038e">VL_OS_MACOSX</a>&#160;&#160;&#160;1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host operating system is Mac OS X. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa463843e959e6add43b050e78892e75a"></a><!-- doxytag: member="host.h::VL_THREADS_POSIX" ref="aa463843e959e6add43b050e78892e75a" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>VL_THREADS_POSIX</b>&#160;&#160;&#160;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e8b6b892c4c517efb458a908f8d8f89"></a><!-- doxytag: member="host.h::VL_OS_WIN" ref="a9e8b6b892c4c517efb458a908f8d8f89" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a9e8b6b892c4c517efb458a908f8d8f89">VL_OS_WIN</a>&#160;&#160;&#160;1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host operating system is Windows (32 or 64) <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b8e0e703e4bbdff30e1c3a00225e74f"></a><!-- doxytag: member="host.h::VL_THREADS_WIN" ref="a4b8e0e703e4bbdff30e1c3a00225e74f" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>VL_THREADS_WIN</b>&#160;&#160;&#160;1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a08df472ecc78e67b920ca29217fabf"></a><!-- doxytag: member="host.h::VL_OS_WIN64" ref="a5a08df472ecc78e67b920ca29217fabf" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a5a08df472ecc78e67b920ca29217fabf">VL_OS_WIN64</a>&#160;&#160;&#160;1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host operating system is Windows-64. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4b8e0e703e4bbdff30e1c3a00225e74f"></a><!-- doxytag: member="host.h::VL_THREADS_WIN" ref="a4b8e0e703e4bbdff30e1c3a00225e74f" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>VL_THREADS_WIN</b>&#160;&#160;&#160;1</td></tr>
<tr><td colspan="2"><div class="groupHeader">Identifying the host compiler</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a1d501d055fcbcd42c1369c64f4bc8e8d">VL_COMPILER_GNUC</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host compiler is GNU C.  <a href="#a1d501d055fcbcd42c1369c64f4bc8e8d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a27371f6fc56a871d3d2a2dea1b191cbf">VL_COMPILER_MSC</a>&#160;&#160;&#160;_MSC_VER</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host compiler is Microsoft Visual C++.  <a href="#a27371f6fc56a871d3d2a2dea1b191cbf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c241c8e1d46fc25653460876004fbee"></a><!-- doxytag: member="host.h::VL_COMPILER_LCC" ref="a8c241c8e1d46fc25653460876004fbee" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>VL_COMPILER_LCC</b>&#160;&#160;&#160;1</td></tr>
<tr><td colspan="2"><div class="groupHeader">Identifying the host CPU architecture</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#aad2a5cd35841264fc165f9b92fad3feb">VL_ARCH_IX86</a>&#160;&#160;&#160;300</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host CPU is of the Intel x86 family.  <a href="#aad2a5cd35841264fc165f9b92fad3feb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a55960eea1c39d0ed79519e4fbdb782bf">VL_ARCH_IA64</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host CPU is of the Intel Architecture-64 family.  <a href="#a55960eea1c39d0ed79519e4fbdb782bf"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Identifying the host data model</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a01af69f0de0af937ca06729348d3b1a6">VL_COMPILER_LLP64</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host compiler data model is LLP64.  <a href="#a01af69f0de0af937ca06729348d3b1a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a06056894ccd483c6171eec205fb253a6">VL_COMPILER_LP64</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host compiler data model is LP64.  <a href="#a06056894ccd483c6171eec205fb253a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a426f6e574a76d69692eace4d858b9adf">VL_COMPILER_ILP32</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host compiler data model is ILP32.  <a href="#a426f6e574a76d69692eace4d858b9adf"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Identifying the host endianness</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a2f05e20e356b146f3d111f403657ca17">VL_ARCH_LITTLE_ENDIAN</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host CPU is little endian.  <a href="#a2f05e20e356b146f3d111f403657ca17"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a040b85d2764e6270f5d14515c8ab02aa">VL_ARCH_BIG_ENDIAN</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Defined if the host CPU is big endian.  <a href="#a040b85d2764e6270f5d14515c8ab02aa"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Printing the atomic data types</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e0dd28d4000da64e451fbce6939cb6f"></a><!-- doxytag: member="host.h::VL_FL_INT64" ref="a9e0dd28d4000da64e451fbce6939cb6f" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a9e0dd28d4000da64e451fbce6939cb6f">VL_FL_INT64</a>&#160;&#160;&#160;&quot;I64&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#ab9925d4a6df873da6df7a59d2a97d81c" title="Signed 64-bit integer.">vl_int64</a> and <a class="el" href="host_8h.html#af37832522d1f5c028ac15d0ccda7ff48" title="Unsigned 64-bit integer.">vl_uint64</a>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac08de2d648945a77801c9884a0ff752d"></a><!-- doxytag: member="host.h::VL_FL_INT32" ref="ac08de2d648945a77801c9884a0ff752d" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ac08de2d648945a77801c9884a0ff752d">VL_FL_INT32</a>&#160;&#160;&#160;&quot;&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#a03fa435c713d3141c4a700f79f5b2600" title="Signed 32-bit integer.">vl_int32</a> and <a class="el" href="host_8h.html#aeb7c862765448a70017105efa4d25e7a" title="Unsigned 32-bit integer.">vl_uint32</a>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a065ee814c68df328e58181c387f8ccf6"></a><!-- doxytag: member="host.h::VL_FL_INT16" ref="a065ee814c68df328e58181c387f8ccf6" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a065ee814c68df328e58181c387f8ccf6">VL_FL_INT16</a>&#160;&#160;&#160;&quot;h&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#a47e046602e64d54280961328bf950ca1" title="Signed 16-bit integer.">vl_int16</a> and <a class="el" href="host_8h.html#ab2275d6c7bf6fc027151d11072b45f03" title="Unsigned 16-bit integer.">vl_uint16</a>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a782a8eb010de36cbc9c4517f73c23d29"></a><!-- doxytag: member="host.h::VL_FL_INT8" ref="a782a8eb010de36cbc9c4517f73c23d29" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a782a8eb010de36cbc9c4517f73c23d29">VL_FL_INT8</a>&#160;&#160;&#160;&quot;hh&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#aee4cc9690b799a33dfc9614636ac34a1" title="Signed 8-bit integer.">vl_int8</a> and <a class="el" href="host_8h.html#a38fbd9a3cf53dfc9a5650c38497b7d35" title="Unsigned 8-bit integer.">vl_uint8</a>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15a80f72eaf892a9f0d69167df1a071b"></a><!-- doxytag: member="host.h::VL_FL_INDEX" ref="a15a80f72eaf892a9f0d69167df1a071b" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a15a80f72eaf892a9f0d69167df1a071b">VL_FL_INDEX</a>&#160;&#160;&#160;VL_FL_INT64</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#a66417c5847876295ea87b38140073879" title="Signed version of vl_size and vl_uindex.">vl_index</a> and <a class="el" href="host_8h.html#ac13bd3cc913e1da576e189a3ec8d66fc" title="Same as vl_size.">vl_uindex</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15a80f72eaf892a9f0d69167df1a071b"></a><!-- doxytag: member="host.h::VL_FL_INDEX" ref="a15a80f72eaf892a9f0d69167df1a071b" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a15a80f72eaf892a9f0d69167df1a071b">VL_FL_INDEX</a>&#160;&#160;&#160;VL_FL_INT32</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> length flag for <a class="el" href="host_8h.html#a66417c5847876295ea87b38140073879" title="Signed version of vl_size and vl_uindex.">vl_index</a> and <a class="el" href="host_8h.html#ac13bd3cc913e1da576e189a3ec8d66fc" title="Same as vl_size.">vl_uindex</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79c56fd25ae0746b063266ec7fae930b"></a><!-- doxytag: member="host.h::VL_FMT_INDEX" ref="a79c56fd25ae0746b063266ec7fae930b" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a79c56fd25ae0746b063266ec7fae930b">VL_FMT_INDEX</a>&#160;&#160;&#160;VL_FL_INDEX &quot;d&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> flag for <a class="el" href="host_8h.html#a66417c5847876295ea87b38140073879" title="Signed version of vl_size and vl_uindex.">vl_index</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afade1e41badafa9c5280aaef35f87403"></a><!-- doxytag: member="host.h::VL_FMT_INTPTR" ref="afade1e41badafa9c5280aaef35f87403" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#afade1e41badafa9c5280aaef35f87403">VL_FMT_INTPTR</a>&#160;&#160;&#160;VL_FMT_INDEX</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> flag for <a class="el" href="host_8h.html#afa16bd9b637357fb5590b7154987239b" title="Integer holding a pointer.">vl_intptr</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addb8218f8f733565479705ff5f6c0e52"></a><!-- doxytag: member="host.h::VL_FMT_UINDEX" ref="addb8218f8f733565479705ff5f6c0e52" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#addb8218f8f733565479705ff5f6c0e52">VL_FMT_UINDEX</a>&#160;&#160;&#160;VL_FL_INDEX &quot;u&quot;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> flag for <a class="el" href="host_8h.html#ac13bd3cc913e1da576e189a3ec8d66fc" title="Same as vl_size.">vl_uindex</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32387e8bdd1b0d03af42522deb12f127"></a><!-- doxytag: member="host.h::VL_FMT_SIZE" ref="a32387e8bdd1b0d03af42522deb12f127" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a32387e8bdd1b0d03af42522deb12f127">VL_FMT_SIZE</a>&#160;&#160;&#160;VL_FMT_UINDEX</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> flag for <a class="el" href="host_8h.html#a0ee26101458c663510d620e3ee7e2555" title="Unsigned integer holding the size of a memory block.">vl_size</a> <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbbbf7b8cd264a829a6aecbe26bffba8"></a><!-- doxytag: member="host.h::VL_FMT_UINTPTR" ref="afbbbf7b8cd264a829a6aecbe26bffba8" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#afbbbf7b8cd264a829a6aecbe26bffba8">VL_FMT_UINTPTR</a>&#160;&#160;&#160;VL_FMT_UINDEX</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>printf</code> flag for <a class="el" href="host_8h.html#a20819052598008f96d3bd302a35c9d59" title="Unsigned integer holding a pointer.">vl_uintptr</a> <br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Atomic data types limits</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a2754158f58ad8118579b45f66426f3"></a><!-- doxytag: member="host.h::VL_BIG_INT" ref="a2a2754158f58ad8118579b45f66426f3" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a2a2754158f58ad8118579b45f66426f3">VL_BIG_INT</a>&#160;&#160;&#160;0x7FFFFFFFL</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Largest integer (math constant) <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab11084ae11b83378e74bf4b1e545f134"></a><!-- doxytag: member="host.h::VL_SMALL_INT" ref="ab11084ae11b83378e74bf4b1e545f134" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ab11084ae11b83378e74bf4b1e545f134">VL_SMALL_INT</a>&#160;&#160;&#160;(- VL_BIG_INT - 1)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Smallest integer (math constant) <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a985a5b1b02b23f20c72ba5d5b9abab2d"></a><!-- doxytag: member="host.h::VL_BIG_UINT" ref="a985a5b1b02b23f20c72ba5d5b9abab2d" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a985a5b1b02b23f20c72ba5d5b9abab2d">VL_BIG_UINT</a>&#160;&#160;&#160;0xFFFFFFFFUL</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Largest unsigned integer (math constant) <br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a026e5e76fb8e1c0ce4722b857ce7e406">vl_static_configuration_to_string_copy</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Human readable static library configuration.  <a href="#a026e5e76fb8e1c0ce4722b857ce7e406"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Endianness detection and conversion</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a0eb83ae66c944bcd8517b577b557f872">vl_swap_host_big_endianness_8</a> (void *dst, void *src)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Host &lt;-&gt; big endian transformation for 8-bytes value.  <a href="#a0eb83ae66c944bcd8517b577b557f872"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#aa1a8104ab44b97df0b09d1afdd4754fc">vl_swap_host_big_endianness_4</a> (void *dst, void *src)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Host &lt;-&gt; big endian transformation for 4-bytes value.  <a href="#aa1a8104ab44b97df0b09d1afdd4754fc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ab2280db7d7cc2f6ce56100ab5ff6c81a">vl_swap_host_big_endianness_2</a> (void *dst, void *src)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Host &lt;-&gt; big endian transformation for 2-bytes value.  <a href="#ab2280db7d7cc2f6ce56100ab5ff6c81a"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Obtaining host info at run time</div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d07eb9d58557d2efdb7aae443f989a9"></a><!-- doxytag: member="host.h::_vl_x86cpu_info_init" ref="a6d07eb9d58557d2efdb7aae443f989a9" args="(VlX86CpuInfo *self)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>_vl_x86cpu_info_init</b> (VlX86CpuInfo *self)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa49e3b97489c15554ec21da6ef5b9f8"></a><!-- doxytag: member="host.h::_vl_x86cpu_info_to_string_copy" ref="afa49e3b97489c15554ec21da6ef5b9f8" args="(VlX86CpuInfo const *self)" -->
char *&#160;</td><td class="memItemRight" valign="bottom"><b>_vl_x86cpu_info_to_string_copy</b> (VlX86CpuInfo const *self)</td></tr>
<tr><td colspan="2"><h2><a name="member-group"></a>
Atomic data types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c72a8c7d2abcd2871b3348138c5f1f4"></a><!-- doxytag: member="host.h::VL_TRUE" ref="a0c72a8c7d2abcd2871b3348138c5f1f4" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a0c72a8c7d2abcd2871b3348138c5f1f4">VL_TRUE</a>&#160;&#160;&#160;1</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>true</code> (1) constant <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abce143a5a9b51d987a74f2ad30046520"></a><!-- doxytag: member="host.h::VL_FALSE" ref="abce143a5a9b51d987a74f2ad30046520" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#abce143a5a9b51d987a74f2ad30046520">VL_FALSE</a>&#160;&#160;&#160;0</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>false</code> (0) constant <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9925d4a6df873da6df7a59d2a97d81c"></a><!-- doxytag: member="host.h::vl_int64" ref="ab9925d4a6df873da6df7a59d2a97d81c" args="" -->
typedef long long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ab9925d4a6df873da6df7a59d2a97d81c">vl_int64</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed 64-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03fa435c713d3141c4a700f79f5b2600"></a><!-- doxytag: member="host.h::vl_int32" ref="a03fa435c713d3141c4a700f79f5b2600" args="" -->
typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a03fa435c713d3141c4a700f79f5b2600">vl_int32</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed 32-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a47e046602e64d54280961328bf950ca1"></a><!-- doxytag: member="host.h::vl_int16" ref="a47e046602e64d54280961328bf950ca1" args="" -->
typedef short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a47e046602e64d54280961328bf950ca1">vl_int16</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed 16-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aee4cc9690b799a33dfc9614636ac34a1"></a><!-- doxytag: member="host.h::vl_int8" ref="aee4cc9690b799a33dfc9614636ac34a1" args="" -->
typedef char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#aee4cc9690b799a33dfc9614636ac34a1">vl_int8</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed 8-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af37832522d1f5c028ac15d0ccda7ff48"></a><!-- doxytag: member="host.h::vl_uint64" ref="af37832522d1f5c028ac15d0ccda7ff48" args="" -->
typedef long long unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#af37832522d1f5c028ac15d0ccda7ff48">vl_uint64</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned 64-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb7c862765448a70017105efa4d25e7a"></a><!-- doxytag: member="host.h::vl_uint32" ref="aeb7c862765448a70017105efa4d25e7a" args="" -->
typedef int unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#aeb7c862765448a70017105efa4d25e7a">vl_uint32</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned 32-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2275d6c7bf6fc027151d11072b45f03"></a><!-- doxytag: member="host.h::vl_uint16" ref="ab2275d6c7bf6fc027151d11072b45f03" args="" -->
typedef short unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ab2275d6c7bf6fc027151d11072b45f03">vl_uint16</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned 16-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38fbd9a3cf53dfc9a5650c38497b7d35"></a><!-- doxytag: member="host.h::vl_uint8" ref="a38fbd9a3cf53dfc9a5650c38497b7d35" args="" -->
typedef char unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a38fbd9a3cf53dfc9a5650c38497b7d35">vl_uint8</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned 8-bit integer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8127af01f6220099c1dd4ec579f5ae09"></a><!-- doxytag: member="host.h::vl_int" ref="a8127af01f6220099c1dd4ec579f5ae09" args="" -->
typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a8127af01f6220099c1dd4ec579f5ae09">vl_int</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <code>int</code>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5bd6e91d6bfd0be04101fdca94069c92"></a><!-- doxytag: member="host.h::vl_uint" ref="a5bd6e91d6bfd0be04101fdca94069c92" args="" -->
typedef unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a5bd6e91d6bfd0be04101fdca94069c92">vl_uint</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <code>unsigned int</code>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad32e7f8ec7333ff33998cf671a3b1412"></a><!-- doxytag: member="host.h::vl_bool" ref="ad32e7f8ec7333ff33998cf671a3b1412" args="" -->
typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ad32e7f8ec7333ff33998cf671a3b1412">vl_bool</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Boolean. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa16bd9b637357fb5590b7154987239b"></a><!-- doxytag: member="host.h::vl_intptr" ref="afa16bd9b637357fb5590b7154987239b" args="" -->
typedef <a class="el" href="host_8h.html#ab9925d4a6df873da6df7a59d2a97d81c">vl_int64</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#afa16bd9b637357fb5590b7154987239b">vl_intptr</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Integer holding a pointer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20819052598008f96d3bd302a35c9d59"></a><!-- doxytag: member="host.h::vl_uintptr" ref="a20819052598008f96d3bd302a35c9d59" args="" -->
typedef <a class="el" href="host_8h.html#af37832522d1f5c028ac15d0ccda7ff48">vl_uint64</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a20819052598008f96d3bd302a35c9d59">vl_uintptr</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer holding a pointer. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0ee26101458c663510d620e3ee7e2555"></a><!-- doxytag: member="host.h::vl_size" ref="a0ee26101458c663510d620e3ee7e2555" args="" -->
typedef <a class="el" href="host_8h.html#af37832522d1f5c028ac15d0ccda7ff48">vl_uint64</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a0ee26101458c663510d620e3ee7e2555">vl_size</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer holding the size of a memory block. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66417c5847876295ea87b38140073879"></a><!-- doxytag: member="host.h::vl_index" ref="a66417c5847876295ea87b38140073879" args="" -->
typedef <a class="el" href="host_8h.html#ab9925d4a6df873da6df7a59d2a97d81c">vl_int64</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#a66417c5847876295ea87b38140073879">vl_index</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Signed version of <a class="el" href="host_8h.html#a0ee26101458c663510d620e3ee7e2555" title="Unsigned integer holding the size of a memory block.">vl_size</a> and <a class="el" href="host_8h.html#ac13bd3cc913e1da576e189a3ec8d66fc" title="Same as vl_size.">vl_uindex</a>. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac13bd3cc913e1da576e189a3ec8d66fc"></a><!-- doxytag: member="host.h::vl_uindex" ref="ac13bd3cc913e1da576e189a3ec8d66fc" args="" -->
typedef <a class="el" href="host_8h.html#af37832522d1f5c028ac15d0ccda7ff48">vl_uint64</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="host_8h.html#ac13bd3cc913e1da576e189a3ec8d66fc">vl_uindex</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <a class="el" href="host_8h.html#a0ee26101458c663510d620e3ee7e2555" title="Unsigned integer holding the size of a memory block.">vl_size</a>. <br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>This module provides functionalities to identify the host operating system, C compiler, and CPU architecture. It also provides a few features to abstract from such details.</p>
<ul>
<li><a class="el" href="host_8h.html#host-os">Host operating system</a></li>
<li><a class="el" href="host_8h.html#host-compiler">Host compiler</a><ul>
<li><a class="el" href="host_8h.html#host-compiler-data-model">Data models</a></li>
<li><a class="el" href="host_8h.html#host-compiler-other">Other compiler specific features</a></li>
</ul>
</li>
<li><a class="el" href="host_8h.html#host-arch">Host CPU architecture</a><ul>
<li><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a></li>
</ul>
</li>
</ul>
<dl class="see"><dt><b>See also:</b></dt><dd><a href="http://predef.sourceforge.net/index.php">http://predef.sourceforge.net/index.php</a></dd></dl>
<h2><a class="anchor" id="host-os"></a>
Host operating system</h2>
<p>The module defines a symbol to identify the host operating system: <a class="el" href="host_8h.html#a9e8b6b892c4c517efb458a908f8d8f89" title="Defined if the host operating system is Windows (32 or 64)">VL_OS_WIN</a> for Windows, <a class="el" href="host_8h.html#ace5a6e77fa663303cfd489f3eaaf1cd9" title="Defined if the host operating system is Linux.">VL_OS_LINUX</a> for Linux, <a class="el" href="host_8h.html#a6368203ab40afc45aa5d2faaf794038e" title="Defined if the host operating system is Mac OS X.">VL_OS_MACOSX</a> for Mac OS X, and so on.</p>
<h2><a class="anchor" id="host-compiler"></a>
Host compiler</h2>
<p>The module defines a symbol to identify the host compiler: <a class="el" href="host_8h.html#a27371f6fc56a871d3d2a2dea1b191cbf" title="Defined if the host compiler is Microsoft Visual C++.">VL_COMPILER_MSC</a> for Microsoft Visual C++, <a class="el" href="host_8h.html#a1d501d055fcbcd42c1369c64f4bc8e8d" title="Defined if the host compiler is GNU C.">VL_COMPILER_GNUC</a> for GNU C, and so on. The (integer) value of such symbols corresponds the version of the compiler.</p>
<p>The module defines a symbol to identify the data model of the compiler: <a class="el" href="host_8h.html#a426f6e574a76d69692eace4d858b9adf" title="Defined if the host compiler data model is ILP32.">VL_COMPILER_ILP32</a>, <a class="el" href="host_8h.html#a06056894ccd483c6171eec205fb253a6" title="Defined if the host compiler data model is LP64.">VL_COMPILER_LP64</a>, or <a class="el" href="host_8h.html#a01af69f0de0af937ca06729348d3b1a6" title="Defined if the host compiler data model is LLP64.">VL_COMPILER_LLP64</a> (see Sect. <a class="el" href="host_8h.html#host-compiler-data-model">Data models</a>). For convenience, it also defines a number of atomic types of prescribed width (<a class="el" href="host_8h.html#aee4cc9690b799a33dfc9614636ac34a1" title="Signed 8-bit integer.">vl_int8</a>, <a class="el" href="host_8h.html#a47e046602e64d54280961328bf950ca1" title="Signed 16-bit integer.">vl_int16</a>, <a class="el" href="host_8h.html#a03fa435c713d3141c4a700f79f5b2600" title="Signed 32-bit integer.">vl_int32</a>, etc.).</p>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>While some of such functionalities are provided by the standard header <code>stdint.h</code>, the latter is not supported by all platforms.</dd></dl>
<h3><a class="anchor" id="host-compiler-data-model"></a>
Data models</h3>
<p>The C language defines a number of atomic data types (such as <code>char</code>, <code>short</code>, <code>int</code> and so on). The number of bits (width) used to represent each data type depends on the compiler data model. The following table summarizes the relevant conventions:</p>
<table class="doxtable">
<caption align="bottom"><b>Compiler data models.</b> The table shows how many bits are allocated to each atomic data type according to each model.</caption>
<tr style="font-weight:bold;">
<td>Data model </td><td><code>short</code> </td><td><code>int</code> </td><td><code>long</code> </td><td><code>long long</code> </td><td><code>void*</code> </td><td>Compiler  </td></tr>
<tr>
<td>ILP32 </td><td style="background-color:#ffa;">16 </td><td style="background-color:#afa;">32 </td><td style="background-color:#afa;">32 </td><td>64 </td><td style="background-color:#afa;">32 </td><td>common 32 bit architectures  </td></tr>
<tr>
<td>LP64 </td><td style="background-color:#ffa;">16 </td><td style="background-color:#afa;">32 </td><td>64 </td><td>64 </td><td>64 </td><td>UNIX-64 (Linux, Mac OS X)  </td></tr>
<tr>
<td>ILP64 </td><td style="background-color:#ffa;">16 </td><td>64 </td><td>64 </td><td>64 </td><td>64 </td><td>Alpha, Cray  </td></tr>
<tr>
<td>SLIP64 </td><td>64 </td><td>64 </td><td>64 </td><td>64 </td><td>64 </td><td></td></tr>
<tr>
<td>LLP64 </td><td style="background-color:#ffa;">16 </td><td style="background-color:#afa;">32 </td><td style="background-color:#afa;">32 </td><td>64 </td><td>64 </td><td>Windows-64  </td></tr>
</table>
<h3><a class="anchor" id="host-compiler-other"></a>
Other compiler-specific features</h3>
<p>The module provides the macro <a class="el" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> to declare symbols exported from the library and the macro <a class="el" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496" title="Adds appropriate inline function qualifier.">VL_INLINE</a> to declare inline functions. Such features are not part of the C89 standard, and change depending on the compiler.</p>
<dl class="user"><dt><b>Example:</b></dt><dd>The following header file declares a function <code>f</code> that should be visible from outside the library. <div class="fragment"><pre class="fragment"><span class="preprocessor"> #include &lt;<a class="code" href="generic_8h.html" title="Generic (Preprocssor, library state, etc.)">vl/generic.h</a>&gt;</span>
 <a class="code" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> <span class="keywordtype">void</span> f () ;
 <a class="code" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> <span class="keywordtype">int</span> i ;
</pre></div> Notice that the macro <a class="el" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> needs not to be included again when the function is defined.</dd></dl>
<dl class="user"><dt><b>Example:</b></dt><dd>The following header file declares an inline function <code>f:</code> <div class="fragment"><pre class="fragment"><span class="preprocessor"> #include &lt;<a class="code" href="generic_8h.html" title="Generic (Preprocssor, library state, etc.)">vl/generic.h</a>&gt;</span>
 <a class="code" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496" title="Adds appropriate inline function qualifier.">VL_INLINE</a> <span class="keywordtype">int</span> f() ;

 <a class="code" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496" title="Adds appropriate inline function qualifier.">VL_INLINE</a> <span class="keywordtype">int</span> f() { <span class="keywordflow">return</span> 1 ; }
</pre></div></dd></dl>
<p>Here the first instruction defines the function <code>f</code>, where the second declares it. Notice that since this is an inline function, its definition must be found in the header file rather than in an implementation file. Notice also that definition and declaration can be merged.</p>
<p>These macros translate according to the following tables:</p>
<table  style="font-size:70%;">
<caption align="bottom">Macros for exporting library symbols</caption>
<tr>
<td>Platform </td><td>Macro name </td><td>Value when building the library </td><td>Value when importing the library  </td></tr>
<tr>
<td>Unix/GCC </td><td><a class="el" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> </td><td>empty (assumes <code>-visibility=hidden</code> GCC option) </td><td><code>__attribute__((visibility ("default")))</code>  </td></tr>
<tr>
<td>Win/Visual C++ </td><td><a class="el" href="host_8h.html#a489d7622ef2e3937985fcb9f89a5cbe5" title="Declares a DLL exported symbol.">VL_EXPORT</a> </td><td><code>__declspec(dllexport)</code>  </td><td><code>__declspec(dllimport)</code>   </td></tr>
</table>
<table  style="font-size:70%;">
<caption align="bottom">Macros for declaring inline functions</caption>
<tr>
<td>Platform </td><td>Macro name </td><td>Value  </td></tr>
<tr>
<td>Unix/GCC </td><td><a class="el" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496" title="Adds appropriate inline function qualifier.">VL_INLINE</a> </td><td>static inline  </td></tr>
<tr>
<td>Win/Visual C++ </td><td><a class="el" href="host_8h.html#a41b94143626a52276b1a0ffd1e29e496" title="Adds appropriate inline function qualifier.">VL_INLINE</a> </td><td>static __inline  </td></tr>
</table>
<h2><a class="anchor" id="host-arch"></a>
Host CPU architecture</h2>
<p>The module defines a symbol to identify the host CPU architecture: <a class="el" href="host_8h.html#aad2a5cd35841264fc165f9b92fad3feb" title="Defined if the host CPU is of the Intel x86 family.">VL_ARCH_IX86</a> for Intel x86, <a class="el" href="host_8h.html#a55960eea1c39d0ed79519e4fbdb782bf" title="Defined if the host CPU is of the Intel Architecture-64 family.">VL_ARCH_IA64</a> for Intel 64, and so on.</p>
<h3><a class="anchor" id="host-arch-endianness"></a>
Endianness</h3>
<p>The module defines a symbol to identify the host CPU endianness: <a class="el" href="host_8h.html#a040b85d2764e6270f5d14515c8ab02aa" title="Defined if the host CPU is big endian.">VL_ARCH_BIG_ENDIAN</a> for big endian and <a class="el" href="host_8h.html#a2f05e20e356b146f3d111f403657ca17" title="Defined if the host CPU is little endian.">VL_ARCH_LITTLE_ENDIAN</a> for little endian. The functions <a class="el" href="host_8h.html#a0eb83ae66c944bcd8517b577b557f872" title="Host &lt;-&gt; big endian transformation for 8-bytes value.">vl_swap_host_big_endianness_8()</a>, <a class="el" href="host_8h.html#aa1a8104ab44b97df0b09d1afdd4754fc" title="Host &lt;-&gt; big endian transformation for 4-bytes value.">vl_swap_host_big_endianness_4()</a>, <a class="el" href="host_8h.html#ab2280db7d7cc2f6ce56100ab5ff6c81a" title="Host &lt;-&gt; big endian transformation for 2-bytes value.">vl_swap_host_big_endianness_2()</a> to change the endianness of data (from/to host and network order).</p>
<p>Recall that <em>endianness</em> concerns the way multi-byte data types (such as 16, 32 and 64 bits integers) are stored into the addressable memory. All CPUs uses a contiguous address range to store atomic data types (e.g. a 16-bit integer could be assigned to the addresses <code>0x10001</code> and <code>0x10002</code>), but the order may differ.</p>
<ul>
<li>The convention is <em>big endian</em>, or in <em>network order</em>, if the most significant byte of the multi-byte data types is assigned to the smaller memory address. This is the convention used for instance by the PPC architecture.</li>
</ul>
<ul>
<li>The convention is <em>little endian</em> if the least significant byte is assigned to the smaller memory address. This is the convention used for instance by the x86 architecture.</li>
</ul>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>The names &ldquo;big endian&rdquo; and &ldquo;little endian&rdquo; are a little confusing. &ldquo;Big endian&rdquo; means &ldquo;big endian first&rdquo;, i.e. the address of the most significant byte comes first. Similarly, &ldquo;little endian&rdquo; means &ldquo;little endian first&rdquo;, in the sense that the address of the least significant byte comes first.</dd></dl>
<p>Endianness is a concern when data is either exchanged with processors that use different conventions, transmitted over a network, or stored to a file. For the latter two cases, one usually saves data in big endian (network) order regardless of the host CPU.</p>
<h2><a class="anchor" id="Multi-threading"></a>
host-threads</h2>
<p>The file defines #VL_THREADS_WIN if multi-threading support is enabled and the host supports Windows threads and #VL_THREADS_POSIX if it supports POSIX threads.</p>
<dl class="author"><dt><b>Author:</b></dt><dd>Andrea Vedaldi </dd></dl>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a040b85d2764e6270f5d14515c8ab02aa"></a><!-- doxytag: member="host.h::VL_ARCH_BIG_ENDIAN" ref="a040b85d2764e6270f5d14515c8ab02aa" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_ARCH_BIG_ENDIAN</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a55960eea1c39d0ed79519e4fbdb782bf"></a><!-- doxytag: member="host.h::VL_ARCH_IA64" ref="a55960eea1c39d0ed79519e4fbdb782bf" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_ARCH_IA64</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch">Host CPU architecture</a> </dd></dl>

</div>
</div>
<a class="anchor" id="aad2a5cd35841264fc165f9b92fad3feb"></a><!-- doxytag: member="host.h::VL_ARCH_IX86" ref="aad2a5cd35841264fc165f9b92fad3feb" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_ARCH_IX86&#160;&#160;&#160;300</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch">Host CPU architecture</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a2f05e20e356b146f3d111f403657ca17"></a><!-- doxytag: member="host.h::VL_ARCH_LITTLE_ENDIAN" ref="a2f05e20e356b146f3d111f403657ca17" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_ARCH_LITTLE_ENDIAN</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a> </dd></dl>

</div>
</div>
<a class="anchor" id="aeba7ee97f4e6474a78c242ca9c49798c"></a><!-- doxytag: member="host.h::VL_CAT" ref="aeba7ee97f4e6474a78c242ca9c49798c" args="(x, y)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_CAT</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">y&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;x ## y</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>first argument to be concatenated. </td></tr>
    <tr><td class="paramname">y</td><td>second argument to be concatenated.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro concatenates its arguments into a single lexical unit by means of the <code>##</code> preprocessor operator. Notice that arguments concatenated by <code>##</code> are not pre-expanded by the C preprocessor. To macro-expand the arguments and then concatenate them,use <a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a>.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a1d501d055fcbcd42c1369c64f4bc8e8d"></a><!-- doxytag: member="host.h::VL_COMPILER_GNUC" ref="a1d501d055fcbcd42c1369c64f4bc8e8d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_COMPILER_GNUC</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">(__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100)
</pre></div><p>This macro is defined if the compiler is GNUC. Its value is calculated as </p>
<div class="fragment"><pre class="fragment"> 10000 * MAJOR + 100 * MINOR + PATCHLEVEL
</pre></div> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler">Host compiler</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a426f6e574a76d69692eace4d858b9adf"></a><!-- doxytag: member="host.h::VL_COMPILER_ILP32" ref="a426f6e574a76d69692eace4d858b9adf" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_COMPILER_ILP32</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler-data-model">Data models</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a01af69f0de0af937ca06729348d3b1a6"></a><!-- doxytag: member="host.h::VL_COMPILER_LLP64" ref="a01af69f0de0af937ca06729348d3b1a6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_COMPILER_LLP64</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler-data-model">Data models</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a06056894ccd483c6171eec205fb253a6"></a><!-- doxytag: member="host.h::VL_COMPILER_LP64" ref="a06056894ccd483c6171eec205fb253a6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_COMPILER_LP64</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler-data-model">Data models</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a27371f6fc56a871d3d2a2dea1b191cbf"></a><!-- doxytag: member="host.h::VL_COMPILER_MSC" ref="a27371f6fc56a871d3d2a2dea1b191cbf" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_COMPILER_MSC&#160;&#160;&#160;_MSC_VER</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler">Host compiler</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a7395dc017ee0e86717a1b5f8c38fcb44"></a><!-- doxytag: member="host.h::VL_DISABLE_SSE2" ref="a7395dc017ee0e86717a1b5f8c38fcb44" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_DISABLE_SSE2</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Define this symbol to disable SSE2 support. </p>

</div>
</div>
<a class="anchor" id="a6aa5ee10e7a31696751b3e5f6d18c829"></a><!-- doxytag: member="host.h::VL_DISABLE_THREADS" ref="a6aa5ee10e7a31696751b3e5f6d18c829" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_DISABLE_THREADS</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Define this symbol to disable multi-threading support. </p>

</div>
</div>
<a class="anchor" id="a489d7622ef2e3937985fcb9f89a5cbe5"></a><!-- doxytag: member="host.h::VL_EXPORT" ref="a489d7622ef2e3937985fcb9f89a5cbe5" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_EXPORT</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler-other">Other compiler-specific features</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a41b94143626a52276b1a0ffd1e29e496"></a><!-- doxytag: member="host.h::VL_INLINE" ref="a41b94143626a52276b1a0ffd1e29e496" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_INLINE</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-compiler-other">Other compiler-specific features</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a61a48096b951544d0554b8a06aa59306"></a><!-- doxytag: member="host.h::VL_STRINGIFY" ref="a61a48096b951544d0554b8a06aa59306" args="(x)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_STRINGIFY</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x</td><td>)</td>
          <td>&#160;&#160;&#160;# x</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>value to be stringified.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro stringifies the argument <em>x</em> by means of the <code>#</code> prerpocessor operator.</p>
<p>The standard C preprocessor does not prescan arguments which are stringified, so</p>
<div class="fragment"><pre class="fragment"><span class="preprocessor"> #define A B</span>
<span class="preprocessor"> char const * str = VL_STRINGIFY(A) ;</span>
</pre></div><p>initializes <code>str</code> with a pointer to the string <code>"A"</code>, which mihgt be unexpected. To fix this issue, you can use <a class="el" href="host_8h.html#a2a5d283f40e6bf0fc1ca74644084a423" title="Expand and then convert the argument to a string.">VL_XSTRINGIFY</a>.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a2a5d283f40e6bf0fc1ca74644084a423" title="Expand and then convert the argument to a string.">VL_XSTRINGIFY</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a755f8d9673970b82ad9375e32d2693ef"></a><!-- doxytag: member="host.h::VL_XCAT" ref="a755f8d9673970b82ad9375e32d2693ef" args="(x, y)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_XCAT</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">y&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;VL_CAT(x,y)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>first argument to be concatenated. </td></tr>
    <tr><td class="paramname">y</td><td>second argument to be concatenated.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro is the same as <a class="el" href="host_8h.html#aeba7ee97f4e6474a78c242ca9c49798c" title="Concatenate two arguments into a lexical unit.">VL_CAT</a>, except that the arguments are macro expanded before being concatenated.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#aeba7ee97f4e6474a78c242ca9c49798c" title="Concatenate two arguments into a lexical unit.">VL_CAT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ae5a425c5832ec8b91c3acd70cc30ad8d"></a><!-- doxytag: member="host.h::VL_XCAT3" ref="ae5a425c5832ec8b91c3acd70cc30ad8d" args="(x, y, z)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_XCAT3</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">y, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">z&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;VL_XCAT(VL_XCAT(x,y),z)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>first argument to be concatenated. </td></tr>
    <tr><td class="paramname">y</td><td>second argument to be concatenated. </td></tr>
    <tr><td class="paramname">z</td><td>third argument to be concatenated.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro is the same as <a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a>, except that it has three arguments.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a0b450714848c2941f3e00e7a9d2338f4"></a><!-- doxytag: member="host.h::VL_XCAT4" ref="a0b450714848c2941f3e00e7a9d2338f4" args="(x, y, z, u)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_XCAT4</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">y, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">z, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">u&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;VL_XCAT(VL_XCAT3(x,y,z),u)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>first argument to be concatenated. </td></tr>
    <tr><td class="paramname">y</td><td>second argument to be concatenated. </td></tr>
    <tr><td class="paramname">z</td><td>third argument to be concatenated. </td></tr>
    <tr><td class="paramname">u</td><td>fourth argument to be concatenated.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro is the same as <a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a>, except that it has four arguments.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a551d8bfc670074c55bf8a0a7405f5e28"></a><!-- doxytag: member="host.h::VL_XCAT5" ref="a551d8bfc670074c55bf8a0a7405f5e28" args="(x, y, z, u, v)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_XCAT5</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">y, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">z, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">u, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">v&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;VL_XCAT(VL_XCAT4(x,y,z,u),v)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>first argument to be concatenated. </td></tr>
    <tr><td class="paramname">y</td><td>second argument to be concatenated. </td></tr>
    <tr><td class="paramname">z</td><td>third argument to be concatenated. </td></tr>
    <tr><td class="paramname">u</td><td>fourth argument to be concatenated. </td></tr>
    <tr><td class="paramname">v</td><td>fifth argument to be concatenated.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro is the same as <a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a>, except that it has five arguments.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a755f8d9673970b82ad9375e32d2693ef" title="Expand and then concatenate two arguments into a lexical unit.">VL_XCAT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="a2a5d283f40e6bf0fc1ca74644084a423"></a><!-- doxytag: member="host.h::VL_XSTRINGIFY" ref="a2a5d283f40e6bf0fc1ca74644084a423" args="(x)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_XSTRINGIFY</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x</td><td>)</td>
          <td>&#160;&#160;&#160;VL_STRINGIFY(x)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>value to be macro-expanded and converted.</td></tr>
  </table>
  </dd>
</dl>
<p>This macro macro-expands the argument <em>x</em> and stringifies the result of the expansion. For instance</p>
<div class="fragment"><pre class="fragment"><span class="preprocessor"> #define A B</span>
<span class="preprocessor"> char const * str = VL_STRINGIFY(A) ;</span>
</pre></div><p>initializes <code>str</code> with a pointer to the string <code>"B"</code>.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#a61a48096b951544d0554b8a06aa59306" title="Convert the argument to a string.">VL_STRINGIFY</a> </dd></dl>

</div>
</div>
<a class="anchor" id="addfdc610a7c5d53f5167f7a02b5baf4f"></a><!-- doxytag: member="host.h::VL_YESNO" ref="addfdc610a7c5d53f5167f7a02b5baf4f" args="(x)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define VL_YESNO</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">x</td><td>)</td>
          <td>&#160;&#160;&#160;((x)?&quot;yes&quot;:&quot;no&quot;)</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">x</td><td>boolean to convert. A pointer to either the string "yes" (if <em>x</em> is true) or the string "no". </td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Example</b></dt><dd><div class="fragment"><pre class="fragment"> <a class="code" href="generic_8h.html#af68d1c6327bf2226b15c84007eab3d94" title="Call user-customizable printf function.">VL_PRINTF</a>(<span class="stringliteral">&quot;Is x true? %s.&quot;</span>, <a class="code" href="host_8h.html#addfdc610a7c5d53f5167f7a02b5baf4f" title="Convert a boolean to &quot;yes&quot; or &quot;no&quot; strings.">VL_YESNO</a>(x))
</pre></div> </dd></dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="a026e5e76fb8e1c0ce4722b857ce7e406"></a><!-- doxytag: member="host.h::vl_static_configuration_to_string_copy" ref="a026e5e76fb8e1c0ce4722b857ce7e406" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* vl_static_configuration_to_string_copy </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>a new string with the static configuration.</dd></dl>
<p>The string includes information about the compiler, the host, and other static configuration parameters. The string must be released by <a class="el" href="generic_8h.html#ae070a0a4d3d367a1ba8308644c88ada3" title="Call customizable free function.">vl_free</a>. </p>

</div>
</div>
<a class="anchor" id="ab2280db7d7cc2f6ce56100ab5ff6c81a"></a><!-- doxytag: member="host.h::vl_swap_host_big_endianness_2" ref="ab2280db7d7cc2f6ce56100ab5ff6c81a" args="(void *dst, void *src)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_swap_host_big_endianness_2 </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>src</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">dst</td><td>destination 2-byte buffer. </td></tr>
    <tr><td class="paramname">src</td><td>source 2-byte bufffer. </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="aa1a8104ab44b97df0b09d1afdd4754fc"></a><!-- doxytag: member="host.h::vl_swap_host_big_endianness_4" ref="aa1a8104ab44b97df0b09d1afdd4754fc" args="(void *dst, void *src)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_swap_host_big_endianness_4 </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>src</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">dst</td><td>destination 4-byte buffer. </td></tr>
    <tr><td class="paramname">src</td><td>source 4-byte bufffer. </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a0eb83ae66c944bcd8517b577b557f872"></a><!-- doxytag: member="host.h::vl_swap_host_big_endianness_8" ref="a0eb83ae66c944bcd8517b577b557f872" args="(void *dst, void *src)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_swap_host_big_endianness_8 </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>src</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">dst</td><td>destination 8-byte buffer. </td></tr>
    <tr><td class="paramname">src</td><td>source 8-byte bufffer. </td></tr>
  </table>
  </dd>
</dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="host_8h.html#host-arch-endianness">Endianness</a>. </dd></dl>

</div>
</div>
</div>
     <!-- Doc Here -->
    </div>
   
   </div>
   <div class="clear">&nbsp;</div>
  </div> <!-- pagebody -->
  <div id="footer">
   &copy; 2007-12 Andrea Vedaldi and Brian Fulkerson
  </div> <!-- footer -->

  <!-- Google Analytics Begins -->
  <script xml:space="preserve" type="text/javascript">
   //<![CDATA[
    var localre = /vlfeat.org/;
    if(document.location.host.search(localre) != -1)
    {
   var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
   document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
   }
   //]]>
  </script>
  <script xml:space="preserve" type="text/javascript">
    //<![CDATA[
    var localre = /vlfeat.org/;
    if(document.location.host.search(localre) != -1)
    {

   try {
   var pageTracker = _gat._getTracker("UA-4936091-2");
   pageTracker._trackPageview();
   } catch(err) {}

   }
   //]]>
  </script>
  <!-- Google Analytics Ends -->
 </body>
</html>

 
